package ch11.d6;

public class TicketSell2 implements Runnable{
    //多线程程序共享数据时，会出现线程安全问题
    //解决办法1：同步代码块
    //格式：
    //synchronized(锁对象){
    //    可能会出现线程安全问题的代码块（访问了共享数据的代码）
    //}
    //解决方法2：同步方法
    //格式：
    //修饰符 synchronized 返回值类型 方法名(参数列表){
    //    可能会出现线程安全问题的代码块（访问了共享数据的代码）
    //}
    int ticket=100;//临界资源
    @Override
    public void run() {
        while (true){
//            synchronized (this) { //每一个对象都有监视器功能
                if (ticket>0){
                   sell();
                }else {
                    break;
                }
//            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public synchronized void sell(){
        if (ticket>0){
            System.out.println(Thread.currentThread().getName()+"卖出了第"+ticket+"张票");
            ticket--;
        }
    }

}
